#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""DocString
Fecha: 2011-02-17
Script en Python para chequer el número errores en las copias
de seguridad del bacula.

Este script coge todos los archivos que 

"""

#Importamos el módulo para hacer llamadas al sistema
import sys
from optparse import OptionParser
import os 
import re
from datetime import date, datetime, timedelta
import time


#Archivos a chequear
reg=re.compile("bacula.*.log")
PATH_LOGS_BACULA = '/var/log/bacula/'
DIAS = 3

NAGIOS_CODES_STATUS = { 'OK':0,
                        'WARNING':1,
                        'CRITICAL':2,
                        'UNKNOWN':3,
                        'DEPENDENT':4}


def nagios_return( code, message ):
    """
    Función encargada de retornar los valores para el Nagios
    """
    print code + ": " + message
    sys.exit(NAGIOS_CODES_STATUS[code])

def get_info():    
    """ Funcion que obtiene la información
    recorremos los archivos de log del bacula y obtenemos la información"""
    datosCopias = []
    dirList=os.listdir(PATH_LOGS_BACULA)
    for filename in dirList:
        if reg.match(filename):
            f=open(PATH_LOGS_BACULA + filename, 'r')
            line=f.readline()
            f.close()
            datosCopias.append(str(line).strip().split('#'))
    for data in datosCopias:
        print data
    return datosCopias

def check_data_nagios(data):
    """ Funcion que chequea la información """
    copiasError = []
    copiasOK = []
    msg = ' ---==  Failed backups  ==---'
    for backup in data:
# backup =  ['2011-02-17', '15:21:09', 'OK', '122', 'Differential', 'P_FERNANDEZ_ON', 'P_FERNANDEZ']
# backup = ['2011-02-17', '15:28:18', 'Error', '126', 'Differential', 'V_ANGHEL_ON', 'V_ANGHEL']
        today = date.today()
        copia = datetime.strptime(backup[0], "%Y-%m-%d")
        deltatiempo = timedelta(days=DIAS)    
        if (backup[2] == 'Error' or backup[2] == 'Fatal Error') or (abs(today - copia.date()) > deltatiempo) :
            copiasError.append(backup)
            msg += '\n' + backup[0] + ' - ' + backup[5] + ' - '+ backup[6]
    #    elif backup[2] == 'OK':
           # msg += 'OK: ' + backup[0] + ' - ' + backup[5] + ' - '+ backup[6] + '\n'
    if copiasError:
        nagios_return('CRITICAL',msg) 
    else:
        nagios_return('OK', 'Todos los backups OK y de menos de ' + str(DIAS) + ' dias' ) 

def pretty_print(data):
    """ Función que saca de forma bonita la información de los servidores encontrados """
    print "No implementado"

def main():
    """ 
    Función general
    """
    parser = OptionParser()
    parser.add_option("-n", 
            action = "store_true",
            dest = "nagios",
            help = u"Activa la salida para el Nagios",
            default = False) 

    #Obtenemos los argumentos de entrada
    (options, args) = parser.parse_args()


    if options.nagios == True:
        check_data_nagios(get_info())
    else:
        pretty_print(get_info())


if __name__ == "__main__":
    main()


__version__ = "$Revision$"
# $Source$

